package Analisis;

import vista.Diccionario;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.Vector;
import javax.swing.JOptionPane;
import Analisis.Palabra;
import java.util.ArrayList;

/**
 *
 * @author Juan Zarate
 */
public class CuentaPalabras {

    StringTokenizer palabras;
    String texto;
    int numeroPalabras;
    HashMap<String, Integer> map = null;

    public CuentaPalabras() {
    }

    public int contadorDelTotalPalabras(String st) {

        palabras = new StringTokenizer(st);
        numeroPalabras = palabras.countTokens();
        return numeroPalabras;
    }

    public Vector<Palabra> contadorDeRepeticionesDeLasPalabras() {
        map = new HashMap<String, Integer>();
        while (palabras.hasMoreTokens()) {
            String token = palabras.nextToken();

            Integer c = map.get(token);
            if (c == null) {
                map.put(token, 1);
            } else {
                map.put(token, c + 1);
            }
        }
        Vector<Palabra> p5 = ordenarHash();
        for (Palabra palabra : p5) {
            System.out.println(palabra);
            
        }
      return p5;
    }

    public Vector<Palabra> ordenarHash(){//2 columnas pal,cant y n filas
        List mapKeys = new ArrayList(map.keySet());//palabra
        List mapValues = new ArrayList(map.values());//Cantidad
        
        int cantAux = 0;
        String palAuxX = "";
        String palAuxY = "";
        
        for (int i = 0; i < mapValues.size()-1; i++) {
            for (int j = i; j < mapValues.size(); j++) {
                int x = Integer.parseInt(""+mapValues.get(i));
                int y = Integer.parseInt(""+mapValues.get(j));
                
                if(x < y){
                    //Intercambiar
                    //cantAux = Integer.parseInt(""+mapValues.get(j));
                    palAuxX = ""+mapKeys.get(i);
                    palAuxY = ""+mapKeys.get(j);
                    
                    mapValues.set(i, y);
                    mapValues.set(j, x);
                    
                    mapKeys.set(i, palAuxY);
                    mapKeys.set(j, palAuxX);
                }
            }
        }
        
        Vector<Palabra> ordenado = new Vector<Palabra>();
        
        for (int i = 0; i < 5; i++) {
            ordenado.add(new Palabra(""+mapKeys.get(i), Integer.parseInt(""+mapValues.get(i))));
        }
        return ordenado;
                
    }
    
    public Vector<Palabra> getMasRepetidas() {
        
        Vector<Palabra> palabras = ordenarHash();
        return palabras;
    }

    public int NumeroTotalDeCaracteresDelTextoSinEspacios(String st) {
            texto = st.replace(" ", "");
            return texto.length();
    }

    public boolean estaEnDicc(String palabra, Vector dicc) {

        for (int i = 0; i < dicc.size(); i++) {
            System.out.println("" + dicc.get(i));
            if (("" + dicc.get(i)).equals(palabra)) {
                return true;
            }
        }

        return false;
    }
}